查看原文
其他

ifconfig已淘汰,ip登场(iproute工具包)

Cloud研习社 Cloud研习社 2023-06-06

教程每周二、四、六更新










CentOS7及以后的版本,net-tools工具包已经被iproute工具包替换。我们看:
[root@m01 ~]# rpm -qi net-tools
Name : net-tools
Version : 2.0
......
Description :
The net-tools package contains basic networking tools,
including ifconfig, netstat, route, and others.
Most of them are obsolete. For replacement check iproute package.

上面最后的输出的意思:net-tools软件包里包含ifconfig, netstat, route等工具,但都被弃用了,取而代之的是iproute软件包。
[root@m01 ~]# rpm -ql iproute
/etc/iproute2
/etc/iproute2/bpf_pinning
/etc/iproute2/ematch_map
/etc/iproute2/group
/etc/iproute2/nl_protos
/etc/iproute2/rt_dsfield
/etc/iproute2/rt_protos
/etc/iproute2/rt_realms
/etc/iproute2/rt_scopes
/etc/iproute2/rt_tables
/etc/sysconfig/cbq
/etc/sysconfig/cbq/avpkt
/etc/sysconfig/cbq/cbq-0000.example
/usr/lib64/tc
/usr/lib64/tc/experimental.dist
/usr/lib64/tc/m_ipt.so
/usr/lib64/tc/m_xt.so
/usr/lib64/tc/normal.dist
/usr/lib64/tc/pareto.dist
/usr/lib64/tc/paretonormal.dist
/usr/sbin/arpd
/usr/sbin/bridge
/usr/sbin/cbq
/usr/sbin/ctstat
/usr/sbin/devlink
/usr/sbin/genl
/usr/sbin/ifcfg
/usr/sbin/ifstat
/usr/sbin/ip
/usr/sbin/lnstat
/usr/sbin/nstat
/usr/sbin/rdma
/usr/sbin/routef
/usr/sbin/routel
/usr/sbin/rtacct
/usr/sbin/rtmon
/usr/sbin/rtpr
/usr/sbin/rtstat
/usr/sbin/ss
/usr/sbin/tc
......


iproute包含了很多工具,其中:
ss命令用来取代netstat命令,之前写过一篇文章:

ip命令的部分功能来实现ifconfig的功能,但比ifconfig更强大。
官网:http://www.policyrouting.org/

语法



ip [ OPTIONS ] OBJECT { COMMAND | help } [argument]

[root@m01 ~]# ip -h
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
                   netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |
                   vrf }
       OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                    -h[uman-readable] | -iec |
                    -f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |
                    -4 | -6 | -I | -D | -B | -0 |
                    -l[oops] { maximum-addr-flush-attempts } | -br[ief] |
                    -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
                    -rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}

OPTIONS

-V 显示命令版本信息
-s 显示更详细的信息
-h 显示数字时,以更方便阅读的方式显示,即自动显示为KB、MB、GB等形式
-f 强制使用指定的协议族
-r 显示主机时,不适用IP地址,而是使用主机的域名
-4 | -6 使用ipv4协议还是使用ipv6协议

OBJECT


link        网络设备
address         IP地址信息
neighbour      邻居表。用来管理ARP或NDISC缓存项
route          路由表。【实现原来route命令的功能】
rule          管理路由策略
tunnel        IP隧道

COMMAND


add
delete
show(list)

argument

argument是命令的一些参数,它们依赖于对象和命令。ip支持两种类型的参数:flag和parameter。flag由一个关键词组成;parameter由一个关键词加一个数值组成。为了方便,每个命令都有一个可以忽略的默认参数。
例如,参数dev 是ip link 命令的默认参数,因此ip link ls eth0等于ip link ls dev eth0。


ip address


ip address当然可以简写成ip addr,甚至可以简写成ip a。
ip addr后面默认的参数是show。
# 详细语法
[root@m01 ~]# ip addr help
Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]
                                                      [ CONFFLAG-LIST ]
       ip address del IFADDR dev IFNAME [mngtmpaddr]
       ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]
                            [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]
       ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]
                         [ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]
                         [ label LABEL ] [up] [ vrf NAME ] ]
       ip address {showdump|restore}

实例演示:
ip addr # 显示网卡IP信息
ip addr show # 显示网卡IP信息

ip addr add 192.168.20.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1
ip addr del 192.168.20.1/24 dev eth0 # 删除eth0网卡IP地址
ip a show dev ens33 # 查看某个特定网卡的信息


ip link

ip link后面默认的参数是dev。
[root@m01 ~]# ip link help
Usage: ip link add [link DEV] [ name ] NAME
                   [ txqueuelen PACKETS ]
                   [ address LLADDR ]
                   [ broadcast LLADDR ]
                   type TYPE [ ARGS ]

       ip link delete { DEVICE | dev DEVICE | group DEVGROUP } type TYPE [ ARGS ]

       ip link set { DEVICE | dev DEVICE | group DEVGROUP }
                    [ { up | down } ]
                    [ dynamic { on | off } ]
                    [ promisc { on | off } ]
                    [ broadcast LLADDR ]
                    [ txqueuelen PACKETS ]
                    [ mtu MTU ]
            ......

       ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]

       ip link xstats type TYPE [ ARGS ]

       ip link afstats [ dev DEVICE ]

       ip link help [ TYPE ]

TYPE := { vlan | veth | vcan | dummy | ifb | macvlan | macvtap |
          bridge | bond | team | ipoib | ip6tnl | ipip | sit | vxlan |
          gre | gretap | ip6gre | ip6gretap | vti | nlmon | team_slave |
          bond_slave | ipvlan | geneve | bridge_slave | vrf | macsec }

  • broadcast表示该网络设备可以将数据报传送给子网内的所有主机;
  • dynamic 表示该网络设备可以动态的建立和删除。
  • promisc表示网络设备处于混杂模式,这时该设备将进行监听并将监听到的数据传递给内核,即使这些数据不是发送给该主机的。通常用于网络探测。
实例演示
ip link show                     # 显示网络接口信息
ip link set eth0 up # 开启网卡eth0,类似以前的ifup eth0
ip link set eth0 down # 关闭网卡eth0,类似以前的ifdown eth0
ip link set eth0 promisc on      # 开启网卡的混合模式
ip link set eth0 promisc offi # 关闭网卡的混个模式
ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
ip link set eth0 mtu 1400        # 设置网卡最大传输单元

ip neighbour

详细语法格式:
[root@m01 ~]# ip neighbour help
Usage: ip neigh { add | del | change | replace }
                { ADDR [ lladdr LLADDR ] [ nud STATE ] | proxy ADDR } [ dev DEV ]
       ip neigh { show | flush } [ proxy ] [ to PREFIX ] [ dev DEV ] [ nud STATE ]
                                 [ vrf NAME ]

STATE := { permanent | noarp | stale | reachable | none |
           incomplete | delay | probe | failed }

add            添加一个新的邻接条目
change      修改一个现有的条目
replace      替换一个已有的条目
lladdr LLADDRESS      邻居的链路层地址。LLADDRESS可以为空。
nud NUD_STATE         邻接条目的状态。nud 是Neighbour Unreachability

实例演示
ip neigh show      # 查看当前邻居信息
ip neigh        # 查看当前邻居信息

ip neigh add 192.168.10.3 lladdr 0:0:0:0:0:1 dev ens32 nud perm    # 永久添加一个邻居信息
ip neigh del 192.168.10.100 dev ens34    # 删除添加的信息

ip route

路由条目保存在内核的路由表中,它们包含寻找到其它网络节点的路径信息。路由表条目都包括一对网络地址/掩码长度以及可选的TOS值等信息。
显示路由信息:
ip route # 默认动作是show

添加路由:
ip route add default via 192.168.0.254  dev eth0 # 设置默认网关为192.168.0.254
ip route list # 查看路由信息
ip route add 192.168.4.0/24  via 192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
ip route del 192.168.4.0/24                  # 删除192.168.4.0网段的网关
ip route del default # 删除默认路由
ip route delete 192.168.1.0/24 dev eth0 # 删除路由

我们进一步看看ip route的用法:
[root@m01 ~]# ip route help
Usage: ip route { list | flush } SELECTOR
       ip route save SELECTOR
       ip route restore
       ip route showdump
       ip route get ADDRESS [ from ADDRESS iif STRING ]
                            [ oif STRING ] [ tos TOS ]
                            [ mark NUMBER ] [ vrf NAME ]
                            [ uid NUMBER ]
       ip route { add | del | change | append | replace } ROUTE

实例演示:
ip route save > tablesave # 保存现有的路由表
ip route restore < tablesave # 用刚才保存的路由表来恢复原有的路由表

注意:ip route restore这个命令期望读取用ip route save保存的数据流。它将尝试恢复路由表信息,使其与保存时的信息完全相同。任何现有的路由都保持不变。即,恢复的时候只做增量添加而不是覆盖现有的路由。


ip rule

在某些情况下,我们不只是需要通过数据包的目的地址决定路由,可能还需要通过其他一些域:源地址、IP协议、传输层端口甚至数据包的负载。这就叫做:策略路由(policy routing)。
linux系统有多张路由表,而路由策略会根据一些条件,将路由请求转向不同的路由表。例如源地址在某些范围走路由表A,另外的数据包走路由表,类似这样的规则是有路由策略rule来控制。
在linux系统中,一条路由策略rule主要包含三个信息,即rule的优先级,条件,路由表。其中rule的优先级数字越小表示优先级越高,然后是满足什么条件下由指定的路由表来进行路由。在linux系统启动时,内核会为路由策略数据库配置三条缺省的规则,即rule 0,rule 32766, rule 32767(数字是rule的优先级),如下:
[root@m01 ~]# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default 
[root@m01 ~]# cat /etc/iproute2/rt_tables |grep -v "^#"
255  local
254  main
253  default
0  unspec

rule 0 :匹配任何条件的数据包,查询路由表local(table id = 255)。rule 0非常特殊,不能被删除或者覆盖。查询路由表local(ID 255) | 路由表local 是一个特殊的路由表,包含对于本地和广播地址的高优先级控制路由。rule 32766:匹配任何条件的数据包,查询路由表main(ID 254),路由表main(ID 254)是一个普通的表,包含所有的无策略路由。平时使用route add添加的路由都是加到这个表里面的。rule 32767:匹配任何条件的数据包,查询路由表default(ID 253),路由表default(ID 253)是一个空表,它是为一些后续处理保留的。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理这个规则也可以删除。
匹配优先级顺序:rule 0 > rule 32766 > rule 32767
[root@m01 ~]# ip rule help
Usage: ip rule { add | del } SELECTOR ACTION
       ip rule { flush | save | restore }
       ip rule [ list [ SELECTOR ]]
SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ]
            [ iif STRING ] [ oif STRING ] [ pref NUMBER ] [ l3mdev ]
            [ uidrange NUMBER-NUMBER ]
ACTION := [ table TABLE_ID ]
          [ nat ADDRESS ]
          [ realms [SRCREALM/]DSTREALM ]
          [ goto NUMBER ]
          SUPPRESSOR
SUPPRESSOR := [ suppress_prefixlength NUMBER ]
              [ suppress_ifgroup DEVGROUP ]
TABLE_ID := [ local | main | default | NUMBER ]

SELECTOR具体参数如下:
From 源地址
To 目的地址(这里是选择规则时使用,查找路由表时也使用)
Tos IP包头的TOS(type of sevice)域
Dev 物理接口
Fwmark 防火墙参数

ACTION动作:
Table     指明所使用的表
Nat     透明网关
Action prohibit   丢弃该包,并发送 COMM.ADM.PROHIITED的ICMP信息
Reject         单纯丢弃该包
Unreachable      丢弃该包, 并发送 NET UNREACHABLE的ICMP信息

实例演示:
  1. 指定优先级
    第一条命令将向规则链增加一条规则,规则匹配的对象是所有的数据包,动作是选用路由表1的路由,这条规则的优先级是32000.
    第二条命令将向规则链增加一条规则,规则匹配的对象是IP为172.16.8.12, tos等于0x10的包,使用路由表2,这条规则的优先级是32001,动作是丢弃。

[root@m01 ~]# ip rule add from 0/0 table 1 pref 32000
[root@m01 ~]# ip rule add from 172.16.8.12/32 tos 0x10 table 2 pref 32001 prohibit
[root@m01 ~]# ip rule
0: from all lookup local
32000: from all lookup 1 
32001: from 172.16.8.12 tos lowdelay lookup 2 prohibit
32766: from all lookup main
32767: from all lookup default

不指定优先级
[root@m01 ~]# ip rule add from 171.13.12.23 tab 200
[root@m01 ~]# ip rule
0: from all lookup local
31999: from 171.13.12.23 lookup 200 
32000: from all lookup 1 
32001: from 172.16.8.12 tos lowdelay lookup 2 prohibit
32766: from all lookup main
32767: from all lookup default

不指定pref 优先级,那么系统就会默认创建rule的优先级,这个优先级就是出0以外,最小的值减1。
注意:不要混淆路由表(route)和规则(rule):ip rule规则指向路由表,多个规则可以引用一个路由表,而且某些路由表可以没有策略指向它。如果系统管理员删除了指向某个路由表的所有规则,这个表就没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。例如:
ip route add default via 192.168.10.1 dev eth2 table 200
ip rule add from 192.168.10.100 lookup 200

第一行表示,先建立一个路由表,其table名为200,这个表里面的默认路由是192.168.10.1
第二行表示 ,新建一个ip的策略,从192.168.10.100发出来的流量都使用路由表200这张图。由于ip rule数字越低,其优先级最高,而路由main(254)表的ip rule规则是32766,如果没有指定ip rule的优先级,其默认是从32765开始减起来的,所以一般就认为,加IP策略会比route -n看到的优先级更高。
如果要指定优先级,可以加上pref number参数。linux上面的路由表只有255个,没有优先级的;而ip rule的策略表是没有限制的,数字越低,其优先级越高。


推荐阅读

Linux 网络状态工具 ss 命令详解

这次终于搞明白VLAN技术了

放后台的Linux任务没有了,试试这个命令

我是如何用10分钟理解Kubernetes的


除每周二、四、六定期更新的《Linux云计算一站式教程》以外,其余时间雷哥会推送一些工作中遇到的小知识、实战经验总结的文章。后续都会收录在“实战经验”合集中。





您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存